package com.pine.manager.core;

import cn.hutool.core.util.StrUtil;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 基础查询
 *
 * @author pine manage
 * @since 2024-08-09
 */
@Data
public class BaseQuery<ID> implements Serializable {
    @Serial
    private static final long serialVersionUID = -1236459474909424379L;

    /**
     * 排序字段&排序类型
     * <p>
     * 比如，对id字段asc排序并且对code字段进行desc排序，传递为<code>id-asc,code-desc</code>
     * </p>
     */
    private String orderBy;

    /**
     * 查询字段
     */
    private String fields;

    /**
     * 主键
     */
    private ID id;

    /**
     * 主键列表
     */
    private List<ID> idList;

    /**
     * 创建时间-开始时间
     */
    private LocalDateTime createTimeStart;

    /**
     * 创建时间-结束时间
     */
    private LocalDateTime createTimeEnd;

    public String[] convertToUnderLineFields() {
        if (StrUtil.isBlank(fields)) {
            return null;
        }

        // 处理字段名，将驼峰命名转为下划线
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < fields.length(); i++) {
            char c = fields.charAt(i);
            if (Character.isUpperCase(c)) {
                result.append(StrUtil.UNDERLINE).append(Character.toLowerCase(c));
            } else {
                result.append(c);
            }
        }
        return result.toString().split(StrUtil.COMMA);
    }
}
